![]() 複数のグラフィックサブシステムおよび低電力消費モードを有するコンピューティングデバイス用ドライバアーキテクチャ、ソフトウェアおよび方法
专利摘要:
現在、多くのコンピューティングデバイスが2つ以上のグラフィックサブシステムを備えることがある。複数のグラフィックサブシステムは、能力が異なり、電力消費量が異なることがあり、例えば、あるサブシステムが別のサブシステムよりも多くの平均電力を消費することがある。電力消費の高いグラフィックサブシステムがデバイスに結合されて、低電力消費グラフィックサブシステムの代わりに、またはこれに追加して使用されることがあるが、性能向上と付加の能力が得られるが、全体的な電力消費が増大してしまう。電力消費の高いグラフィックサブシステムを低電力消費モードに設定しつつ、電力消費の高いグラフィックサブシステムの使用から低電力消費グラフィックサブシステムへ切り替えることによって、全体的な電力消費が低減される。プロセッサがアプリケーションソフトウェアおよびドライバソフトウェアを実行する。前記ドライバソフトウェアは、前記第1のグラフィックサブシステムの動作を制御する第1のドライバコンポーネントと、前記第2のグラフィックサブシステムの動作を制御する第2のドライバコンポーネントとを含む。第1のグラフィックシステムおよび第2のグラフィックシステムのいずれが使用中であるかに応じて、別のプロキシドライバコンポーネントが、第1のドライバコンポーネントおよび第2のドライバコンポーネントのいずれかにコール(例えばAPI/DDIコール)を転送する。 公开号:JP2011509446A 申请号:JP2010538226 申请日:2008-12-15 公开日:2011-03-24 发明作者:ブリンザー ポール 申请人:アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated; IPC主号:G06F9-50
专利说明:
[0001] [関連出願への相互参照] 本願は、2007年12月13日出願の、発明者フィルムマーおよびポールブリンザーによる、本願の譲受人と所有者共通の米国仮特許出願第61/013,527号(「複数のグラフィックサブシステムおよび低減電力消費モードを有するコンピューティングデバイス用ドライバアーキテクチャ、ソフトウェア、および方法」)の利益を要求し、そのすべてを参照して、ここに援用する。また、本願は、2006年5月30日出願の米国特許出願第11/421,005号および2007年5月30日出願の米国特許出願第11/755,625号にも関連し、その両者の内容を参照して、ここに援用する。] [0002] 本発明は、一般に、コンピューティングデバイスに関し、より詳細には、複数のグラフィックサブシステムを有するデバイス、および関連するソフトウェアドライバに関する。また、一態様において、本発明はこのようなデバイスにおいて電力消費を低減させるための方法を対象としている。] 背景技術 [0003] 従来のコンピューティングデバイスなどの多くの電子デバイスは現在、二次元および三次元グラフィックのレンダリング、動画ビデオのデコーディングおよびエンコーディングなどが可能なグラフィックサブシステムを備える。このような機能と望ましい処理速度を提供するために、最近のグラフィックサブシステムは搭載されるトランジスタ数がますます増えている。当然、トランジスタ数の増加に伴い、呼応してグラフィックサブシステムの電力消費が増大している。] [0004] この結果、最速かつ最も機能が豊富なグラフィックサブシステムは、ほとんどの場合、高い所要電力を満たすことができるデバイスのためのものとなっている。ラップトップ、個人情報端末、ビデオおよびオーディオプレーヤ、携帯電話などといったポータブルコンピューティングデバイスは多くの場合、機能が限られているが、電気効率の高い(すなわち低電力の)部品を装備している。] [0005] このようなグラフィックサブシステムは多くの場合、プロセッサ相互接続回路(多くの場合「チップセット」と呼ばれる)などの他のコンピューティング部品に搭載されている。] [0006] 近年、固定型コンピュータに匹敵するグラフィック機能と性能をポータブルデバイスに提供しようという傾向がある。これは、多くの場合、ポータブルデバイスに、任意選択の強力な外部グラフィックサブシステムを追加可能とすることによって行われる。例えば、PCIExpress(PCIe)規格は、ラップトップコンピュータへの外付け部品として、グラフィックサブシステムを備えるPCI Express準拠グラフィックカードの相互接続を想定している。] [0007] 複数のグラフィックサブシステムが存在する場合、特定のグラフィックサブシステムを使用するために、コンピューティングデバイスを再起動(例えば、リブート)せずに、コンピューティングデバイスの動作状態を切り替えることが求められることが多い。] 発明が解決しようとする課題 [0008] しかし、一部のオペレーティングシステムのソフトウェアアーキテクチャは、1つのグラフィックドライバの使用しか想定していない。このため、複数のグラフィックサブシステムが存在する場合は、この1つのドライバが、複数のサブシステムの全ての動作を制御する必要がある。これは、特に、異なる製造業者によってサブシステムが供給される場合には、非現実的となることがある。] [0009] したがって、複数のグラフィックドライバの使用を可能にするソフトウェアおよびデバイスが依然として求められている。] 課題を解決するための手段 [0010] 現在、多くのコンピューティングデバイスが2つ以上のグラフィックサブシステムを備えることがある。複数のグラフィックサブシステムは、能力が異なり、電力消費量が異なることがあり、例えば、あるサブシステムが別のサブシステムよりも多くの平均電力を消費することがある。電力消費の高いグラフィックサブシステムがデバイスに結合されて、低電力消費グラフィックサブシステムの代わりに、またはこれに追加して使用されることがあるが、性能向上と付加の能力が得られるが、全体的な電力消費が増大してしまう。電力消費の高いグラフィックサブシステムを低電力消費モードに設定しつつ、電力消費の高いグラフィックサブシステムの使用から低電力消費グラフィックサブシステムへ切り替えることによって、全体的な電力消費が低減される。] [0011] プロセッサがアプリケーションソフトウェアおよびドライバソフトウェアを実行する。前記ドライバソフトウェアは、前記第1のグラフィックサブシステムの動作を制御する第1のドライバコンポーネントと、前記第2のグラフィックサブシステムの動作を制御する第2のドライバコンポーネントとを含む。第1のグラフィックシステムおよび第2のグラフィックシステムのいずれが使用中であるかに応じて、別のプロキシドライバコンポーネントが、アプリケーションソフトウェアから、第1のドライバコンポーネントおよび第2のドライバコンポーネントのいずれかにコール(例えばAPI/DDIコール)を転送する。] [0012] このプロキシドライバコンポーネントは、オペレーティングシステムとアプリケーションに1つのインタフェースを提示する一方で、2つの別のドライバコンポーネントを使用できるようにし、利便性が高い。プロキシドライバコンポーネントは、Windows Vistaのユーザモードドライバ(UMD)コンポーネントおよび/またはカーネルモードドライバ(KMD)コンポーネントなどである。] [0013] 本発明の別の態様によれば、電子デバイスが提供される。前記電子デバイスは、グラフィックをレンダリングするように動作可能な第1のグラフィックサブシステムと、グラフィックをレンダリングするように動作可能な第2のグラフィックサブシステムと、前記第1のグラフィックサブシステムおよび前記第2のグラフィックサブシステムの少なくとも一方と通信している少なくとも1台のディスプレイと、アプリケーションソフトウェアおよびドライバソフトウェアを実行するプロセッサとを備え、前記ドライバソフトウェアは、前記第1のグラフィックサブシステムの動作を制御するための第1のドライバコンポーネントと、前記第2のグラフィックサブシステムの動作を制御するための第2のドライバコンポーネントと、前記第1のグラフィックシステおよび前記第2のグラフィックシステムのいずれが使用中であるかに応じて、前記アプリケーションから、前記第1のドライバコンポーネントおよび前記第2のドライバコンポーネントのいずれかにコールを転送するプロキシドライバコンポーネントとを含む。] [0014] 本発明の別の態様によれば、グラフィックサブシステムが提供され、前記グラフィックサブシステムは、グラフィックをレンダリングするように動作可能な第1のグラフィックサブシステムと、グラフィックをレンダリングするように動作可能な第2のグラフィックサブシステムと、前記第1のグラフィックサブシステムおよび前記第2のグラフィックサブシステムの両方と通信しているディスプレイと、アプリケーションソフトウェアおよびドライバソフトウェアを実行するプロセッサとを備え、前記ドライバソフトウェアは、前記第1のグラフィックサブシステムの動作を制御するための第1のユーザモードドライバコンポーネントと、前記第2のグラフィックサブシステムの動作を制御するための第2のユーザモードドライバコンポーネントと、前記第1のグラフィックシステおよび前記第2のグラフィックシステムのいずれが使用中であるかに応じて、前記アプリケーションから、前記第1のユーザモードドライバコンポーネントおよび前記第2のユーザモードドライバコンポーネントのいずれかにコールを転送するユーザモードプロキシドライバコンポーネントと、前記第1のグラフィックサブシステムの動作を制御するための第1のカーネルモードドライバコンポーネントと、前記第2のグラフィックサブシステムの動作を制御するための第2のカーネルモードドライバコンポーネントと、前記第1のグラフィックシステムおよび第2のグラフィックシステムのいずれかが使用されているかに応じて、前記ユーザモードドライバコンポーネントのいずれかから、前記第1のカーネルドライバコンポーネントおよび前記第2のカーネルドライバコンポーネントのいずれかにコールを転送するためのカーネルモードプロキシドライバコンポーネントとを含む。] [0015] 本発明の更に別の態様によれば、グラフィックをレンダリングするように動作可能な第1のグラフィックサブシステムと第2のグラフィックサブシステムとを有するコンピューティングデバイスを動作させる方法が提供される。前記方法は、前記電子デバイスで実行しているソフトウェアアプリケーションまたはオペレーティングシステムからドライバコールを受け取るステップと、前記第1のグラフィックシステおよび前記第2のグラフィックシステムのいずれが使用中であるかに応じて、ソフトウェアアプリケーションから、前記第1のグラフィックサブシステムの動作を制御する第1のソフトウェアドライバコンポーネントおよび前記第2のグラフィックサブシステムの動作を制御する第2のソフトウェアドライバコンポーネントのいずれかに前記ドライバコールを転送するステップとを含む。] [0016] 本発明のほかの態様および特徴は、添付の図面を参照して、以下の本発明の特定の実施形態の説明を検討すれば、当業者にとって明らかとなるであろう。] 図面の簡単な説明 [0017] 本発明の実施形態の例示的なコンピューティングデバイスのブロック図。 本発明の実施形態の例示的なコンピューティングデバイスのブロック図。 従来のソフトウェアの機能ブロック図。 本発明の実施形態の例示的なドライバソフトウェアを有する図2のコンピューティングデバイスの例示的なソフトウェアの機能ブロック図。 本発明の実施形態の例示的な図2のデバイスのソフトウェアによって実行されるステップの詳細を示すフローチャート。 図4のソフトウェアにおけるAPI/DDIコールを模式的に示す図。 本発明の実施形態の例示的な図2のデバイスのソフトウェアによって実行されるステップの詳細を示すフローチャート。 図2のコンピューティングデバイスの一部の別のブロック図。 本発明の実施形態の例示的な図2のデバイスのソフトウェアによって実行されるステップの詳細を示すフローチャート。 本発明の別の実施形態の例示的なコンピューティングデバイスの一部の別のブロック図。 本発明の実施形態の例示となる、図10のデバイスのソフトウェアによって実行されるステップの詳細を示すフローチャート。 図10のデバイスの動作を示すブロック図。 図10のデバイスの動作を示すブロック図。 本発明の別の実施形態の例示的なコンピューティングデバイスの一部の別のブロック図。] 図10 図2 図4 実施例 [0018] 図面において、本発明の実施形態を、例示のみを目的として図示する。] [0019] 図1は、2つのグラフィックサブシステム30および40とディスプレイ26とを備える電子デバイス10の簡略高水準ブロック図である。明らかとなるように、各グラフィックサブシステム30,40は、2Dグラフィック、3Dグラフィック、デコードされた動画ビデオなどのうちの1つ以上の形態でコンピュータグラフィックをレンダリングすることが可能な専用電子回路を備える。] 図1 [0020] 一方のグラフィックサブシステム40は、もう一方のグラフィックサブシステム30よりも高い平均電力を消費しうる。一般に、平均電力消費の高いグラフィックサブシステム40は、グラフィックサブシステム30よりも優れたグラフィックレンダリング機能を有する。例えば、グラフィックサブシステム40は、平均電力消費の低いグラフィックサブシステムよりも高いフレームレートで2Dまたは3Dのグラフィックをレンダリングすることが可能である。同様に、グラフィックサブシステム30,40が同じ能力を有している必要はない。グラフィックサブシステム40は一般にグラフィックサブシステム30よりも多くの機能ブロックを備える。] [0021] グラフィックサブシステム30,40はいずれも、レンダリングされたグラフィックが表示される同じディスプレイ26に物理的または論理的に結合されうる。本発明の実施形態の例示的なデバイス10は、ディスプレイ26へのグラフィックが高電力消費のグラフィックサブシステム40によってレンダリングされる高電力消費モードから、ディスプレイ26へのグラフィックが低電力消費のグラフィックサブシステム30によってレンダリングされ、かつグラフィックサブシステム40が部分的、完全、または実質的に無効にされる低電力モードに切り替わることができる。] [0022] 高電力モードから低電力モードへの移行は、デバイス10に電力サイクル(すなわち電源切断および再始動)を要求することなく動的に行われ、かつソフトウェアの制御下でプロセッサ12によって行うことができ、利便性が高い。この文脈において、ソフトウェアには、アプリケーションソフトウェア、ファームウェア、デバイスドライバ、BIOSなどが含まれてもよい。] [0023] 本発明は、2つのグラフィックサブシステムを備える実質的にあらゆる電子デバイスの一部を構成しうる。このように、デバイス10は、デスクトップコンピューティングデバイス、ポータブルコンピューティングデバイス(ラップトップコンピュータ、PDA、携帯電話、ビデオまたはオーディオプレーヤ、メディアセンタなどを含む)の形態を取ることができる。] [0024] 以下に説明する例示的な実施形態では、本発明の実施形態はモバイル(ラップトップ)コンピューティングデバイスの一部を構成するものとして開示される。] [0025] 具体的には、図2は、本発明の実施形態の例示的な特定のモバイルコンピューティングデバイス10の簡略ブロック図である。図1に示す図示のデバイス10は、従来のインテル(Intel)x86コンピュータアーキテクチャに基づくコンピューティングデバイスである。しかし当業者は、本発明がPowerPCアーキテクチャ、AMDx86または他の公知のアーキテクチャなどの他のアーキテクチャを有するコンピューティングデバイスにおいて実装されてもよいことを容易に認めるであろう。] 図1 図2 [0026] 図に示すように、例示のデバイス10は、中央処理装置(CPU)として形成されたプロセッサ12、ホストメモリ14および周辺機器を備え、これらはすべて、一体型インタフェース回路16,18(ノースブリッジ16およびサウスブリッジ18とも呼ばれる)によって相互接続されている。これらはすべてマザーボード上に形成することができる。] [0027] インタフェース回路16は、高速インタフェースであり、CPU12、メモリ14および周辺機器を高速拡張バス20経由で相互接続している。インタフェース回路16は更に、CPU12を低速インタフェース回路18に相互接続している。1つ以上の周辺機器拡張スロット22が高速拡張バス20経由でインタフェース回路16と相互接続されうる。例示的な高速拡張バス20は、ギガバイト/秒範囲の帯域幅を有するPCIExpress(PCIe)バスであり、この帯域幅でのデータ転送リード/ライトを可能にする。] [0028] インタフェース回路16は更に、モニタ、LCDパネル、テレビなどの形態をとりうるディスプレイ26での表示のためのビデオ信号の生成に適した一体型グラフィックプロセッサ(IGP)として実装された第1のグラフィックサブシステム30を備える。] [0029] 追加の第2のグラフィックサブシステム40がデバイス10の一部を形成している。例示的な実施形態では、グラフィックサブシステム40は周辺拡張カード46に形成された外部グラフィックプロセッサとして実装されている。また、周辺拡張カード46は拡張バス20の拡張スロット22を経由してインタフェース回路16に接続される。以下で明らかとなるように、第2のグラフィックサブシステム40を設けることにより、デバイス10は、デバイス10が本来備えない拡張グラフィック機能を提供することができる。第2のグラフィックサブシステムによってフレームバッファとして使用するために、グラフィックメモリ50が周辺拡張カード46に備えられうる。同様に、グラフィックサブシステム40と通信している電力コントローラ60が任意選択で拡張カード46に形成され、グラフィックサブシステム40の動作を制御することができる。具体的には、電力コントローラ60は、グラフィックサブシステム40の部品によって使用されるメモリクロックおよびピクセルクロックなどのクロックを調節する、グラフィックサブシステム40の機能ブロックを無効に(または切断)する、グラフィックサブシステム40の各部分に印加される電圧を下げる、あるいは別の方法で電力消費が低減される1つ以上のモードにサブシステム40を公知のように設定することができる。] [0030] 任意選択の別の電力コントローラ70が第1のグラフィックサブシステム30と通信していてもよく、グラフィックサブシステム30の部品によって使用されるメモリクロックおよびピクセルクロックなどのクロックを調節する、グラフィックサブシステム30の機能ブロックを無効に(または切断)する、グラフィックサブシステム30の各部分に印加される電圧を下げる、あるいは別の方法で電力消費が低減される1つ以上のモードにサブシステム30を公知のように設定することができる。] [0031] 例示的なグラフィックサブシステム40は周辺拡張カード46に形成されているが、当業者はグラフィックサブシステム40がデバイス10のマザーボードに、または他の場所にも同様に簡単に形成できることを容易に認めるであろう。] [0032] インタフェース回路18は、光ディスクドライブ28などの低速周辺機器および相互配線、ならびにハードディスクドライブの形態の持続型記憶メモリ34を一体型IDE/SATAポート(図示せず)経由で、ならびにプリンタおよび他の周辺機器をパラレルまたはUSBポート(図示せず)経由で相互接続する。更に他の周辺機器が、例えば公知のPCIまたはISA規格に準拠した低速拡張バス24によって相互接続されうる。サウンドカードおよびネットワークインタフェース(図示せず)などの他の部品も同様に低速拡張バス24経由で、または別様にインタフェース回路18と相互接続されうる。] [0033] 上で説明したように、デバイス10は、ラップトップまたは小型コンピューティングデバイスの形態のポータブルコンピューティングデバイスとして好適に形成することができる。このため、1つのハウジングがDC電源38、ディスプレイ26、および上述のマザーボードおよび部品を収容してもよい。第2のグラフィックサブシステム40は、コンピューティングデバイスの他の部分を収容する1つのハウジングに追加されても、またはデバイス10が物理的に相互接続された時にのみデバイス10の一部を構成するドッキングステーションの一部を形成してもよい。] [0034] デバイス10は、少なくとも2つの電力消費モード、すなわち、高電力消費モードと低電力消費モードで動作することができる。図に示した実施形態では、デバイス10の高電力モードとは、デバイス10がAC(主)電源に接続された電源によって給電されている時に入るモードであり、低電力消費モードとは、デバイス10が1つ以上のバッテリ、燃料電池などを使用するDC電源38によって給電されている時に入るモードでもよい。別例では、電力消費モードが、例えばユーザの好み、実行中のソフトウェアアプリケーションのタイプ、バッテリレベルなどに基づき、ユーザによって選択されるか、ソフトウェアによって制御されるか、または別の方法で選択されてもよい。] [0035] 図に示した実施形態では、デバイス10は、図4に図に示すように、システムメモリ内部に記憶されたソフトウェア200を実行する。システムメモリは持続型記憶メモリ34およびホストメモリ14を含み(図2)、更にソフトウェア200を記憶し実行するためにデバイス10によって使用される追加のランダムアクセスメモリ、リードオンリーメモリおよびディスク記憶メモリの適切な組合せを含み得る。例示的なソフトウェア200は、例えば、リードオンリーメモリに記憶されても、またはディスクドライブ28(図1)などの外部周辺機器からロードされても、コンピュータネットワーク(図示せず)によってロードされてもよい。] 図1 図2 図4 [0036] 例示実施形態において、ソフトウェア200はMicrosoft Windows Vistaプラットホームに基づく。しかし、デバイス10を動作させるソフトウェアは、本発明の実施形態の例示的な様態において、このプラットホームに基づく必要はない。代わりに、例示的なソフトウェアは、Linux、MacOSXなどの他の公知のコンピュータオペレーティングシステム、または他のオペレーティングシステムとともに動作することができる。オペレーティングシステムが異なる場合、ソフトウェアアーキテクチャが図4に図示したものと大きく変わることがある。] 図4 [0037] Windows Vistaオペレーティングシステム環境では、グラフィックサブシステム30,40などのハードウェア部品の低レベル制御は一般に、ドライバと一般に呼ばれるソフトウェアコンポーネントによって実施される。各ハードウェア部品の動作は、1つ以上のこのようなコンポーネントによって制御される。] [0038] Windows Vistaオペレーティングシステムの場合、ドライバアーキテクチャは、Windowsデバイスドライバ(WDDM)と呼ばれ、Microsoft WindowsドライバキットAPIに詳しく記載されている。詳細は、http://www.microsoft.com/whdc/devtools/WDK/AboutWDK.mspxおよびhttp://msdn2.microsoft.com/en-us/library/aa480220.aspxから入手することができ、その内容を参照によりここに援用する。] [0039] 図4に示すソフトウェア200の動作を説明する前に、従来のWindows Vistaアーキテクチャを説明することが適切であろう。このために、図3は、Windows Vistaオペレーティングシステムに基づく従来のソフトウェア200’を示す。図に示すように、ソフトウェア200’は、アプリケーションソフトウェア202’と、数個の汎用のオペレーティングシステムのグラフィックコンポーネント204’,206’,208’,210’(ランタイムコンポーネントと呼ばれる)と、サブシステム30または40などのグラフィックサブシステム用のデバイスドライバを定義する、数個のハードウェア固有のグラフィックデバイスドライバコンポーネント220,222,224とを含む。同様に、ディスプレイローダモジュール218’、Windows Vistaカーネル216’、およびWindowsグラフィックデバイスインタフェース(GDI)ソフトウェア214’も図示されている。] 図3 図4 [0040] 明らかとなるように、Windows Vistaオペレーティングシステムの下のドライバソフトウェアは、ユーザモードまたはカーネルモードのいずれかで動作することができる。ユーザモードドライバ(UMD)コンポーネントは、プロセッサ12によってサポートされる非特権のモードで実行し、メモリ、レジスタへの限られたアクセスが許可される。図2では、コンポーネント220,222がUMDコンポーネントである。アプリケーションソフトウェア202を含む他のソフトウェアもこのモードで実行する。UMDコンポーネント220,222とアプリケーションソフトウェア202’は、直接低レベルのシステムデータにアクセスすることができない。同様に、これらが、メモリのすべての領域、すべてのレジスタなどにアクセスできるとは限らない。しかし、これらは、カーネルモードで実行しているソフトウェアへのコールを行うことができる。] 図2 [0041] これに対し、カーネルモードドライバ(KMD)コンポーネントは、オペレーティングシステムカーネルと同じプロセッサモードで実行し、このため、通常、デバイス10のメモリ、レジスタやその他のリソースに無制限にアクセスすることができる。UMDコンポーネントはKMDコンポーネントをコールし、コンピューティングデバイス10のリソースへの低レベルのアクセスを得ることができる。コンポーネント224はKMDコンポーネントである。KMDドライバアーキテクチャは、2006年5月10日の「カーネルモードドライバフレームワークのためのサンプルドライバ(Sample Drivers for the Kernel Mode Driver Framework)」http://www.microsoft.com/whdc/driver/wdf/KMDF-samp.mspxと、「Introduction toWDM(WDM入門)」http://msdn2.microsoft.com/en-us/library/aa490246.aspxに詳しく説明されている。] [0042] UMDコンポーネントとKMDコンポーネントは、構造、エントリポイントおよびシステムインタフェースが異なる。デバイスが、UMD、KMDのいずれを必要とするかは、デバイスの種類と、デバイス用にオペレーティングシステムに既に提供されているサポートとに応じて決まる。グラフィックサブシステム30,40などのグラフィックサブシステム用のドライバは、通常、カーネルモードで動作している少なくとも1つのコンポーネントを含む。更に、Windows Vistaオペレーティングシステムでは、KMDコンポーネントはシステムの初期化(すなわち電源投入時)にロードされるが、UMDコンポーネントは、必要なときにオンデマンドでロードされうる。] [0043] より詳細には、Windows Vistaアーキテクチャでは、グラフィックサブシステム用のUMDコンポーネントが、グラフィックサブシステムが使用するリソースに低レベルでアクセスするために、対応するKMDコンポーネントと通信を行なう。一般に、各KMDコンポーネントは、デバイスドライバインタフェース(DDI)を提供し、これを対応するUMDコンポーネントが認識している。DDIには、関数呼出し、オブジェクト(メソッドを含む)、入出力制御(IOCTL)コール、および関連するデータ構造が含まれうる。明らかとなるように、関数呼出しは、多くの場合このようなデータ構造として構成される関数/メソッドのパラメータを介して、データを受け取る。データ構造の厳密な特徴は、DDI定義に規定されている。] [0044] 図に示した実施形態では、オペレーティングシステムグラフィックコンポーネント204’,206’,208’は、オペレーティングシステムの製造業者(この場合マイクロソフト)が供給するランタイムコンポーネントである。一方、UMDコンポーネントとKMDコンポーネントの形のハードウェア固有ドライバコンポーネント220,222,224は、サードパーティの製造業者(例えばグラフィックサブシステム30または40の製造業者)によって提供されうる。] [0045] オペレーティングシステムグラフィックコンポーネントは、ランタイム三次元グラフィックランタイムコンポーネント204’(Direct 3Dランタイム)と、ハードウェア高速化グラフィックインタフェースランタイムコンポーネント(DXVA)206’と、3Dオープンフラフィックスライブラリ(OpenGL)ランタイムグラフィックコンポーネント208’とを有する。対応するハードウェア固有のUMDコンポーネント220,222は、Direct 3D、DXVA、およびOpenGLAPIに対応するAPIハードウェアコールのハードウェア固有の実装を提供する。] [0046] ランタイムコンポーネント204’,206’,208’とUMDコンポーネント220,222は、アプリケーションソフトウェア202およびオペレーティングシステムのほかの部分が使用する、一元化されたグラフィックアプリケーションプログラマインターフェース(API)を提供する。より詳細には、マイクロソフトが詳細に説明しているように、APIは、UMDコンポーネント220’,222’またはランタイムコンポーネント204’,206’,208’内のドライバソフトウェアルーチン(例えば関数またはメソッド)を実行させる関数呼出し、オブジェクトなどを提供する。APIコールは、アプリケーションソフトウェア200’、オペレーティングシステムの一部(例えばモジュール204’,206’,208’)、または他のドライバによって行われうる。これに対して、UMDコンポーネント220,222は、このAPIコールに対応するソフトウェアコードを(通常は関数またはオブジェクトメソッドの形で)実行する。D3D、DXVAおよびOpenGLのUMDコンポーネント220,222によって提供される関数およびコールバックは、マイクロソフトデベロッパーズネットワーク(www.msdn.com)から入手可能な「Windows Driver Kit: Display Devices Windows Vista Display Driver Model Reference」に詳しく記載されている。] [0047] より詳細には、UMDコンポーネント220,222またはKMDコンポーネント224がロードされると、オペレーティングシステムのロードルーチンが、ドライバコンポーネントのエントリポイントをみつけ、この名前は、DriverEntry()(カーネルモードドライバ用)、あるいはUMDコンポーネント220,222ではDllMain()やその他(例えばOpenAdapter())である。UMD/KMDコンポーネント220,222,224は、OSから周知の構造体を受け取る関数を有し、この構造体を、UMD/KMDコンポーネント220,222,224のエントリポイントのコードが、所期の挙動を実装するUMD/KMDコンポーネント220,222,224内の関数をポイントするように埋める。この名前は、DDI仕様によって定義されており、いわゆる定義ファイルによって実装される。] [0048] 例えば、KMDコンポーネント224は、DDIのドライバ実装関数セットの一部であるさまざまな動作のための関数ポインタのセットを含むDRIVER_INITIALIZATION_DATA構造体を受け取る。必要に応じて、UMDコンポーネント220,222の残りの部分が、これらの関数をコールしてドライバの適切な動作を開始し、これにより、必ずしもすべての場合ではないが多くの場合、(通常、別の何らかのKMDドライバの内部関数を呼び出すことによって)ハードウェアアクセスが発生する。] [0049] UMDコンポーネント220,222は、ダイナミックリンクライブラリ(DLL)として作成されてもよく、WDDMに準拠する。このように、各UMDコンポーネント220,222は、WDDMに準拠した関数およびオブジェクト、IOCTの集合を提供する。概して、各ドライバコンポーネントは、定義済みのエントリポイントであるDriverEntry()、定義済みのオブジェクトクラス、ドライバエントリポイント、定義済みの関数およびコールバックを有する。各ドライバがロードされると、そのエントリポイントのソフトウェアコードが実行され、DriverEntry()および定義済みのドライバルーチンが、所期の構造体に登録される。] [0050] DllMain()エントリポイントは、UMDコンポーネントの基本的なデータ構造を割り当てて初期化するため、あるいはUMDのアンロード時に、これを制御されたメカニズムで破棄するために使用される。] [0051] WDDMUMDコンポーネントの場合、OpenAdapter()コールは、KMDコンポーネントのDriverEntry()コールと同様に動作する。すなわち、OpenAdapter()コールは、関数ポインタのセットを含むデータ構造を受け取り、UMDコンポーネント220,222が、UMDコンポーネント内の適切な関数を示すようにこのデータ構造を埋める。] [0052] このため、この構造体により、UMD内のサポートされる関数/オブジェクトおよび関連するコードの名前およびアドレスが、オペレーティングシステムのほかの部分に戻される。この場合も、D3D、DXVAおよびOpenGLのUMDコンポーネント220,222によってサポートされるUMD関数および構造体は、マイクロソフトデベロッパーズネットワークから入手可能な上記の「Windows Driver Kit: Display Devices Windows Vista Display Driver Model Reference」に詳しく記載されている。] [0053] このため、各UMDコンポーネント220,222のロードを終了した時点で、API関数/オブジェクトおよびIOCTLが、アプリケーション202’とオペレーティングシステムソフトウェアの残りに認識されている。特定されたアドレスでオブジェクトのインスタンスを生成することにより、アプリケーションソフトウェア200によってAPIオブジェクトがインスタンス生成されうる。関数/メソッドとIOCTLが、その対応するアドレスで実行されうる。] [0054] また、オペレーティングシステムグラフィックモジュールは、カーネルモードグラフィックコアソフトウェアコンポーネント210’(Windows Vistaオペレーティングシステムでは「DirectX Core」と呼ばれる)とKMDコンポーネント224も含む。グラフィックコアソフトウェアコンポーネント210’は、UMDコンポーネント220,222のために、これらがデバイス10のリソースにカーネルモードでアクセスできるようにするためのAPIを提供する。グラフィックコアソフトウェアコンポーネント210’は、ビデオメモリマネージャ、スケジューラ、互換性のために特定のAPI/DDI要求を変換する(または「サンク」する)ルーチンを更に含む。上で詳細に説明したように、KMDコンポーネント224は、Windowsドライバモデル、すなわちWindowsドライバフレームワークに準拠しうる。このように、KMDコンポーネント224は定義済みのオブジェクトクラス、関数、および構造体を含み、DDIを提供する。] [0055] UMDコンポーネント220,222と同様に、KMDコンポーネント224は、初期化ルーチンであるDriverEntry()を有し、このルーチンは、通常、名前とメモリアドレスによって、オブジェクトクラス、関数および構造体の識別子を返し、KMDコンポーネント224のための必要なDDIを提供する。上で説明したように、KMDコンポーネント224は通常、システム起動時にロードされ(初期化される)。] [0056] また、KMDコンポーネント224は、オペレーティングシステムのほかの部分には特に認識されず、報告もされないが、相補的なUMDドライバ220または222には認識されているDDIも有しうる。] [0057] ソフトウェア200は階層構造を有しており、上位レベルのレイヤが、特定の機能を提供するために下位レイヤを使用する。このため、アプリケーションソフトウェア202は、通常、ランタイムオペレーティングシステムグラフィックモジュール204’,206’,208’、あるいはUMDコンポーネント220,222またはGDI214’に対してコールを行うことによって、グラフィックをレンダリングする。グラフィックモジュール204’,206’,208’は、全てのサードパーティのビデオドライバに共通の、汎用のハードウェアに依存しないコードのみを含む。このため、ランタイムコンポーネント204’,206’,208’は、UMDコンポーネント220,222にAPI/DDIコールを行いうる。データ構造内に定義した既知のパラメータが、例えば生成した構造体を指す適切なポインタによって、UMDコンポーネント220,222に渡される。UMDコンポーネント220,222は、ハードウェア固有のコードと構造体を含む。しかし、上で説明したように、UMDコンポーネント220,222はユーザレベルのアクセスしか持たない。UMDコンポーネント220,222は、KMDコンポーネント224によって提供される公知のAPI/DDIを直接使用することにより、あるいはカーネルモードグラフィックコアソフトウェアコンポーネント210’を介して、KMDコンポーネント224と通信する。] [0058] KMDコンポーネント224は、下層のハードウェア(例えばグラフィックサブシステム30または40)に、適切な低レベル命令を渡すことができる関数、オブジェクトなどを有する。KMDコンポーネント224への複数のコールがキューイングされうる。これに対して、低レベル命令が、下層のハードウェアによって実行されうる。例えば、低レベル命令には、グラフィックプロセッサ実行可能命令などが含まれうる。] [0059] 多くの他の公知のオペレーティングシステムとは異なり、Windows Vistaでは、1つのディスプレイドライバKMDコンポーネント224’のロードしか許可されない。別の補助アプリケーションが、ディスプレイドライバローダ218’として動作する。ローダ218’は、一般に、起動時に実行されるが、起動後に実行されてもよい。ローダ218’は、グラフィックコアソフトウェアコンポーネント210がアクセスするために、サードパーティのKMDコンポーネント(例えばKMDコンポーネント224’)をロードして、これを初期化する。ローダ218は、KMDコンポーネント224’などのカーネルモードドライバコンポーネントのロード/アンロードに使用されうるが、グラフィックKMDコンポーネントをロードするには、別のドライバをアンロードする必要がある。] [0060] ここで、サブシステム30,40(図1)などの2つのグラフィックサブシステムが存在する場合、UMDコンポーネント220,222とKMDコンポーネント224は、この両者のグラフィックサブシステムの動作を制御し、2つのグラフィックシステム間を選択的に切り替え可能にする。ドライバコンポーネント220,222,224へのAPIコールが、複数のサブシステムのうちのいずれが指定されているかを特定しうる。しかし、1つのUMD/KMDが、複数のグラフィックサブシステムをサポートしなければならことが制限となる。例えば、1つのドライバが多数の異なるアダプタをサポートすることは、非現実的なことがある。この問題は、サブシステムが異なる製造業者によって供給される場合は更に悪くなる。] 図1 [0061] 図4は、本発明の実施形態の例示的なソフトウェアとグラフィックモジュールとを示す。この場合も、例示的なソフトウェアを、Windows Vista環境を例に挙げて説明する。このため、オペレーティングシステムの一部を形成するモジュールおよびコンポーネントは図3に示したものと同じであり、図4では「’」を付けずに同じ参照番号で示し、詳細に説明することはない。] 図3 図4 [0062] しかし、着目すべきは、UMDコンポーネント220,222とKMDコンポーネント224(図3)がそれぞれ、プロキシドライバコンポーネント、すなわちUMDプロキシコンポーネント320,322とKMDプロキシコンポーネント324に置き換わっている。明らかとなるように、UMDプロキシコンポーネント320,322とKMDプロキシコンポーネント324は、オペレーティングシステムのほかの部分に、API/DDIの1つのセットを提供し、1つのグラフィックドライバとして認識される。このため、ランタイムコンポーネント204,206,208;アプリケーションソフトウェア202;およびオペレーティングシステムのほかの部分は、図3のグラフィックAPI関数/オブジェクトを呼び出し(またはコール)しうる。] 図3 [0063] 追加の電力制御アプリケーション201も、機能的に図示されている。明らかとなるように、電力制御アプリケーションは図1のグラフィックサブシステム30,40全体の電力消費状態を制御しうる。電力制御アプリケーション201は、スタンドアロンのアプリケーションでも、ATI/AMD Inc.から入手可能なCatalyst Control Centerアプリケーションなどの全般的なユーザ/グラフィックサブシステム制御および構成アプリケーションの一部であってもよい。] 図1 [0064] これに対し、UMDプロキシコンポーネント320,322とKMDプロキシコンポーネント326は、このようなグラフィック関数のコールを、複数の個々のハードウェア固有のUMDグラフィックドライバコンポーネント340,342;350,352;およびKMDグラフィックドライバコンポーネント370,372のいずれかに、転送する。詳細には、下で詳細に説明するように、UMDプロキシコンポーネント320は、UMDコンポーネント340または342にコールを転送し、UMDプロキシコンポーネント322は、UMDコンポーネント350または352にコールを転送し、KMDプロキシコンポーネント324はKMDプロキシコンポーネント360またはKMDプロキシコンポーネント362にコールを転送する。] [0065] UMDコンポーネント340,350および342,352は、UMDコンポーネント220と同様に、グラフィックサブシステム30,40のハードウェアにそれぞれ固有の関数、オブジェクト、IOCTLなどを含む、グラフィックサブシステム30,40に対応するハードウェア固有のUMDコンポーネントである。KMDコンポーネント360,362は、同じように、KMDコンポーネント224と同様であり、カーネルモードでグラフィックサブシステム30,40と対話するように設計された関数、オブジェクト、IOCTLなどを含む。] [0066] 例えば、UMDコンポーネント340,350とKMDコンポーネント360は、第1のグラフィックサブシステム30用のユーザモードDirectXドライバソフトウェア、OpenGLドライバソフトウェア、およびカーネルモードドライバソフトウェアコンポーネントをそれぞれ提供し、UMDコンポーネント342,352とKMDコンポーネント362は、第2のグラフィックサブシステム40用のユーザモードDirectXドライバソフトウェア、OpenGLドライバソフトウェア、およびカーネルモードドライバソフトウェアコンポーネントをそれぞれ提供しうる。コンポーネント340,350,360(またはコンポーネント342,352,362)は、グラフィックUMD/KMDコンポーネント220,222,224の代わりに、図3に示すようにオペレーティングシステムによって直接ロードされうるという点で従来と同じであり、利便性が高い。] 図3 [0067] このようにして、グラフィックUMD/KMDコンポーネント340,342;350,352;360,362のそれぞれは、低レベルグラフィック機能を実行し、含まれるグラフィックハードウェアに固有の方法でグラフィックハードウェアにアクセスしうる。] [0068] UMDプロキシドライバコンポーネント320,322とKMDプロキシドライバコンポーネント324は、一方では、オペレーティングシステムのほかの部分および他のアプリケーションに、一意のAPI/DDIを提示し、他方では、ハードウェア固有のUMD/KMDドライバコンポーネント340,350,360または342,352,362に、コール、IOCTL、要求、現在のオブジェクトなど(集合的に「API/DDIコール」と呼ぶ)を転送し、利便性が高い。] [0069] 動作時に、UMDプロキシドライバコンポーネント320,322とKMDプロキシドライバコンポーネント324が、オペレーティングシステムのほかの部分によってロードされる。] [0070] UMDプロキシドライバコンポーネント320または322がロードされると、そのエントリルーチン(例えばDIIMain()/OpenAdapter())が実行される。明らかとなるように、UMDプロキシドライバコンポーネント320,322のエントリルーチンは、UMDコンポーネント222,224と同様に、UMDコンポーネント340,342の一方または両方をロードし、Vistaオペレーティングシステムのほかの部分に、UMDプロキシドライバコンポーネント320,322内のサポートされるAPI/DDIコールを識別している、所期のデータ構造を提供する。この場合も、所期のAPI/DDIのアドレスが、所期の構造体によって関数、オブジェクト、IOCTLへのアドレスの形で提供される。] [0071] 図5のブロックS500により詳細に示すように、UUMDプロキシドライバコンポーネント320内のソフトウェアコードによって、MDコンポーネント340,342がロードされる。詳細には、ブロックS502において、UMDコンポーネント340または342などのUMDドライバコンポーネントが、通常は、動的にリンクされたライブラリとしてロードされる。次に、UMDプロキシドライバコンポーネント320によって、新たにロードされたUMDコンポーネント340または342のドライバ初期化ルーチンDIIMain()/OpenAdapter()などがコールされうる。ブロックS504において、新たにロードされたUMDコンポーネント340または342のドライバ初期化ルーチンが、(UMDコンポーネント220,222が名前、アドレスなどを返すのと同様に)サポートされる関数の名前およびアドレス、IOCTLなどを、UMDプロキシコンポーネント320に返す。次に、ブロックS508において、UMDプロキシドライバコンポーネント320は、ロードされたUMDコンポーネント340または342によってサポートされるオブジェクトクラス、関数、IOCTL等の間の一致を表すデータ構造を作成する。] 図5 [0072] 例えば、UMDプロキシドライバコンポーネント320が、DXVAの関数呼出しおよびオブジェクトをサポートするように設計され、このため、公知のDXVAの関数呼出しおよびオブジェクトと、ロードされたUMDコンポーネント340または342内のそのエントリポイント間の一致が作成される。ブロックS506の終了時点で、UMDプロキシドライバコンポーネント320は、メモリ内に、UMDプロキシドライバコンポーネント320によってサポートされるDXVAの関数、オブジェクト、IOCTLなどのそれぞれに対応する、UMDコンポーネント340または342内のアドレスを提供する構造体を作成しうる。] [0073] 特定のUMDコンポーネント340または342;350または352が、プロキシドライバコンポーネント320,322によってロードされても、必要に応じて動的にロードされてもよい。つまり、グラフィックサブシステム30または40のいずれかが使用中ではない場合、これに対応するUMDドライバコンポーネントはロードする必要がない。] [0074] ブロックS500に対応するソフトウェアが、UMDプロキシドライバコンポーネント320によってロードされるUMDドライバ340,342ごとに実行されうる。ステップS500は、UMDコンポーネント350,352のためのプロキシドライバコンポーネントとして動作するUMDプロキシドライバコンポーネント322によっても同様に実行される。] [0075] 同様に、ブロックS500は、KMDプロキシドライバコンポーネント324の初期化時(通常はシステムの起動時)にも実行されうる。KMDプロキシドライバコンポーネント324は、KMDドライバ360,362の初期化ルーチン(例えばOpenAdapter())を実行する。] [0076] サポートされる各ドライバコンポーネント(例えばUMDコンポーネント340,342;UMDコンポーネント350,352;およびKMDコンポーネント360,362)について、UMDプロキシドライバコンポーネント320,322とKMDプロキシドライバコンポーネント324のそれぞれにより、ブロックS500(またはその均等物)が実行されると、UMD/KMDプロキシドライバコンポーネント320,322,324が、グラフィックサブシステム30,40に固有のUMD/KMDコンポーネントをロードしており、ロードされたUMDコンポーネント340,342;350,352;およびKMDコンポーネント360,362内のサポートされる関数、IOCTLの対応するメモリアドレス/エントリポイントを確認している。] [0077] オペレーティングシステムのほかの部分にシステムリソース情報を提供するために、KMDプロキシコンポーネント324のみが、グラフィックサブシステム30,40の両者について直接認識可能であり、インストール可能である。グラフィックサブシステム30,40の両者のドライバ固有のレジストリエントリがマージされ、プロキシドライバコンポーネントが、これらのレジストリエントリを読み出し、UMDコンポーネント340,350;342,352に公開しうる。] [0078] また、UMDコンポーネント340,342;350,352は、複数のプロパティも返すが、返されるプロパティが、複数のグラフィックサブシステムとの対話に使用される1つのドライバと矛盾しないことを保証するために、UMDプロキシコンポーネント320,322によってプロパティが収集され、調整される必要がある。このようなプロパティは、UMDプロキシコンポーネント320,322によって、オペレーティングシステムに渡されうる。例えば、ビデオメモリヒープ、GPUエンジンのプロパティ、DMMトポロジなどを、UMDプロキシコンポーネント320,322によってマージする必要がある。] [0079] UMD/KMDコンポーネント340,342;350,352;および360,362をロードする代りに、これらが、ビルド時に、UMDプロキシドライバコンポーネント320,322;およびKMDプロキシコンポーネント324に静的にリンクされてもよい。これを行うには、当然、UMD/KMDコンポーネント340,342;350,352;および360,362、またはリンク可能オブジェクトモジュールのソースコードにアクセスできる必要がある。] [0080] UMDプロキシコンポーネント320,322;およびKMDプロキシコンポーネント324がドライバUMDコンポーネント340,342;350,352;360,362をロード/リンクする結果、UMDプロキシドライバコンポーネント320,322;およびKMDプロキシ324は、アプリケーションソフトウェア202またはオペレーティングシステムのほかの部分によって、グラフィックサブシステム30または40のいずれが指定されているかに応じて、UMD/KMDプロキシコンポーネント320,322,324へのAPI/DDIコールを、個々のUMD/KMDコンポーネント340または342;350または352;および360または362に転送しうる。これは図6にも図式的に示されている。] 図6 [0081] UMDプロキシ320,322;およびKMDプロキシ324によってサポートされるAPI/DDIコールの詳細が、実際にはUMDコンポーネント340,342;350,352;およびKMDコンポーネント360,362が実行する、サポートされるAPI/DDIコール用の転送ルーチンの詳細を設定したデータ構造を生成することによって、アプリケーションおよびオペレーティングシステムの残りの部分に公開されうる。] [0082] API/DDIコールは、このような転送関数(またはオブジェクト)によって、UMD/KMDプロキシドライバコンポーネント320,322,324内に転送されうる。UMD/KMDプロキシドライバコンポーネント320,322,324の各転送ルーチンまたはオブジェクトのアドレスが、転送される特定のAPI関数/コール/オブジェクト/IOCTLに従って、オペレーティングシステムおよび他のアプリケーションに公開されうる。これに対して、各転送ルーチンまたはオブジェクトは、プロキシドライバコンポーネントが代理しているUMD/KMDドライバコンポーネントのいずれかにコールを転送する。このようにして、プロキシドライバコンポーネント320,322,324へのAPI/DDIコールが、UMDドライバ340,342または350,352またはKMDコンポーネント360,362内の対応するドライバ関数/コール/オブジェクト/IOCTLに転送されうる。] [0083] 詳細には、図7に示すように、ブロックS700において、ブロックS508で対応するエントリポイントが決定されたUMDコンポーネント内の対応する関数/コール/オブジェクト/IOCTLのアドレスに基づいて、単にUMD/KMDプロキシドライバコンポーネント320、322または324によって、各API/DDIコールが再転送されうる。詳細には、ステップS700が実行されると、ブロックS702において、UMD/KMDプロキシコンポーネント320,322またはKMDプロキシコンポーネント324は、機能API/DDIコールを処理すべきUMD/KMDコンポーネント(例えばUMDコンポーネント340,342;350,352;またはKMDコンポーネント360,362)を決定する。例えば、これは、API/DDIコールまたは関連するデータを解析して関連するグラフィックサブシステムを特定するか、あるいは単に複数のグラフィックサブシステムのうち、現在使用中のものを特定することによって行うことができる。下で詳細に説明するように、現在使用中のグラフィックサブシステム30または40は、デバイス10の電力消費モードに基づいて決まりうる。現在使用中のサブシステムは、通常は、表示中で、エンドユーザがみているグラフィック/ビデオをレンダリングしている。] 図7 [0084] 関連するドライバが特定されると、ブロックS706において、UMD/KMDプロキシコンポーネント320,322またはKMDコンポーネント324は、ブロックS508で作成した一致構造体を参照して、API/DDIコールのアドレスを決定する。アドレスが決定されると、関連するUMD/KMDコンポーネント340または342;350または352;360または362内のAPI/DDIコールが行われうる。次にUMD/KMDコンポーネントが、API/DDIコールに対応するコードを実行する。] [0085] なお、UMDコンポーネント340,342または350,352に対するコールが、別のカーネルモードAPI/DDIコールを行ってもよい。この結果、KMDプロキシコンポーネント324に対するAPI/DDIコールが行われうる。KMDプロキシコンポーネント324は、UMDプロキシコンポーネント320,322と同様に、図7に詳細に示すように、DDIコールを適切なKMDコンポーネント360,362に転送する。KMDプロキシコンポーネント324は、UMDプロキシコンポーネント320が行う評価と同じように、すなわち、コールの性質に応じて、あるいは現在アクティブなグラフィックサブシステムに応じて、カーネルモードAPI/DDIコールを転送すべきKMDコンポーネント360,362を決定しうる。] 図7 [0086] (例えばオブジェクトの作成によって、または関数パラメータによって)データが付帯されるコールの場合、データへのポインタがUMDコンポーネント340,342,350,352またはKMDコンポーネント360,362に渡され、決定されたUMDプロキシコンポーネント320,322またはKMDプロキシコンポーネント324に渡されうる。データをポインタとして渡すことができない場合、対応するデータ構造を介してデータが渡されうる。] [0087] 一部のAPI/DDIコールは、オペレーティングシステムのほかの部分に認識されておらず、初期化時に(例えばDllMain()またはAdapterOpen()の実行時に)、UMDプロキシドライバコンポーネント320,322またはKMDプロキシドライバコンポーネント324に戻されないことがある。これは、特に、例えば1社の製造業者/供給元によって提供されるUMDコンポーネント340,342などの相補的なUMDコンポーネントと対話する、KMDコンポーネント360または362などのKMDコンポーネントについて当てはまる。DDIコールがサポートされていても、オペレーティングシステムに公開されているとは限らない。このようなコールは、知られていなければ、通常はKMDプロキシドライバコンポーネント324によって転送できない。この事態を回避するために、各KMDコンポーネント360,362は、ドライバ初期化ルーチンの実行を受けて、例えば、オペレーティングシステムのスケジューラのコンテキスト切り替えおよびページング要求のために、一般的なオペレーティングシステムの通信に関与する、サポートされる全てのAPI/DDIを報告しなければならない。これが可能でない場合、KMDコンポーネント360,362は、KMDプロキシドライバコンポーネント324によって要求されうるAPI/DDIコールに関する情報を返すクエリルーチンを更に備える。] [0088] また、プロキシドライバコンポーネントは、グラフィックサブシステム30,40に影響しうる状態変化を確実に追跡できるように、API/DDIコールに対して行われたUMD/KMDコンポーネントからのコールを受け取る必要がある。] [0089] 図8は、図2のデバイス10の一部の別の簡略ブロック図を示し、この図では、図4のソフトウェア200(より詳細には、UMDプロキシコンポーネント320,322とKMDプロキシコンポーネント324)が使用されうる。図に示すように、インタフェース回路16は、中央プロセッサ12とシステムメモリ14とを相互接続している。グラフィックサブシステム30(インタフェース回路16上でグラフィックプロセッサとして実装)は、グラフィックエンジン32、メモリコントローラ72、ディスプレイインタフェース74およびバスインタフェース78を備える。] 図2 図4 図8 [0090] グラフィックエンジン32は、2Dグラフィックまたは3Dグラフィックのレンダリング、ビデオのデコードなどが可能な機能ブロックである。理解されるように、グラフィックサブシステム30は複数のグラフィックエンジンを備えうる。] [0091] メモリコントローラ72は、グラフィックサブシステム30がグラフィックメモリおよびホストメモリ14にアクセスできるようにする。図に示した実施形態では、グラフィックサブシステム30によって使用されるグラフィックメモリは、ホストメモリ14の一部を構成している。しかし当業者は、グラフィックサブシステム30が自身のローカルメモリを含むか、または自身のローカルメモリと通信することができることを容易に認めるであろう。バスインタフェース78はサブシステム30がバス20によって通信できるようにする。] [0092] 理解されるように、ディスプレイインタフェース74は、ポート78によって相互接続されたディスプレイデバイス26に表示するために、バッファ内のデータを変換するためのいずれかの適切なインタフェースであってもよい。例えば、ディスプレイインタフェース74は、ランダムアクセスメモリディジタルアナログコンバータ(RAMDAC)の形態を取ることができる。1つ以上のビデオコネクタが、グラフィックサブシステム30を、LCDパネル、モニタ、テレビなどといった1つ以上のディスプレイデバイスと相互接続できるようにする。出力ポート78は、VGAポート、コンポジットビデオポート、DVIポート、LVDSポート、DVOポート、SDVOポートなどの形態を取ることができる。] [0093] また、グラフィックサブシステム40(図2の周辺拡張カード46に形成)は、高速拡張バス20の拡張スロット経由でインタフェース回路16に接続されている。グラフィックサブシステム40は、グラフィックエンジン42、メモリコントローラ52、バスインタフェース58およびディスプレイインタフェース54を備える。グラフィックサブシステム40はグラフィックメモリ50を備えるか、またはグラフィックメモリ50と通信している。] 図2 [0094] グラフィックエンジン42は、グラフィックエンジン32と同様に、2Dグラフィックまたは3Dグラフィックのレンダリング、ビデオのデコードなどが可能な機能ブロックである。理解されるように、グラフィックサブシステムは複数のグラフィックエンジンを備えうる。場合によっては、グラフィックエンジン42はグラフィックエンジン32によってのみでは提供されない機能を提供することができる。] [0095] メモリコントローラ52は、グラフィックサブシステム40がメモリ50およびホストメモリ14にアクセスできるようにする。バスインタフェース58はグラフィックサブシステム40がバス20によって通信できるようにする。] [0096] ディスプレイインタフェース54は、メモリコントローラ52経由でグラフィックメモリ50のフレームバッファをサンプリングしビデオコネクタで画像を提示する。このようにして、外部グラフィックエンジン42によってメモリ50のフレームバッファにレンダリングされた画像が表示されうる。ビデオコネクタは、外部ディスプレイに直接、またはビデオ信号が一体型ディスプレイに送られる場合にはデバイス10のマザーボードに、または外部ディスプレイをデバイス10に接続するためのコネクタに接続されうる。この場合も、ディスプレイインタフェース54は、RAMDAC、シングルエンドまたはディファレンシャル送信器などといった、ディスプレイデバイス32に表示するためにバッファ内のデータを変換するための、いずれかの適切なインタフェースであってもよい。] [0097] 上で説明したように、電力コントローラ60がグラフィックサブシステム40と通信しており、ディスプレイインタフェース54、メモリコントローラ52、グラフィックエンジン42、バスインタフェース58およびグラフィックメモリ50のうちの1つ以上の各々またはその一部の電力消費を、これらの部品の全部または一部のクロックおよび電圧の調整、電源切断または別様な無効化などの従来の電力消費技術を用いて制御する。電力コントローラ60は、バス20上の信号によって、または別様に制御することができ、例えばACPI規格に準拠であってもよい。] [0098] グラフィックサブシステム30はグラフィックサブシステム40と全く同様に動作する。このように、グラフィックサブシステム30は、メモリコントローラ72を使用して、ホストメモリ14またはグラフィックサブシステム30のローカルなメモリに保持されているフレームバッファにアクセスする。このフレームバッファはディスプレイインタフェース74によってサンプリングされ、画像が、ディスプレイに直接接続されうるビデオ出力コネクタに提示される。経済的な一体型部品を提供するために、グラフィックサブシステム30は機能が限定されている。例えば、グラフィックサブシステム30の解像度、メモリ、グラフィックプロセッサ速度、3Dグラフィック能力などが比較的制限されていてもよく、グラフィックサブシステム40の外部グラフィックプロセッサ42よりも低速に動作してもよい。] [0099] 三次元グラフィック、ゲームグラフィックなどといった演算処理の多いグラフィックは、グラフィックサブシステム40によって、より効果的に実行される。したがって、デバイス10内部のアドオングラフィックサブシステム40を使用することで、ゲーム、コンピュータ支援設計ソフトウェア、アニメーションソフトウェア、レンダリングソフトウェアなどといったグラフィック集約的アプリケーションの最新機能をエンドユーザが体感できるようになる。アドオングラフィックサブシステム40は、エンドユーザによって選択され、必要に応じて交換されて、最新のものを使用することができ、利便性が高い。従来は、追加のグラフィック計算能力は、ワークステーション演算装置でしか利用できなかった。モバイルコンピューティングデバイスの拡張スロットの登場により、今では、このような計算能力がラップトップなどのポータブルコンピューティングデバイスの所有者も利用できるようになっている。当然、グラフィックサブシステム40で高性能の(または異なる性能の)グラフィックエンジン42を使用すると、デバイス10全体の電力消費が増大する。この増大した電力消費は、バッテリ電源によって給電されるコンピューティングデバイスでは支えきれないこともある。] [0100] 同時に、グラフィックエンジン42を備えたアドオングラフィックサブシステム40が存在する場合に、グラフィックサブシステム30は冗長となりうる。例えば、複数台の物理的ディスプレイがデバイス10に接続されていない場合、グラフィックサブシステム30は役割を果たさないこともある。このため、グラフィックサブシステム30は無効にされうる。一方、グラフィックサブシステム30の動作を制御する電力コントローラ70が存在する場合、グラフィックサブシステム30は、非使用中時に低電力モードに設定されうる。この場合も、電力コントローラ70は、グラフィックサブシステム30の一部を無効にするかまたは切断するか、またはグラフィックサブシステム30の一部のクロックまたは電圧を調整しうる。] [0101] 本発明の実施形態の例示的なソフトウェア200(図4)は、サブシステム30が存在する場合に、デバイス10が一方の高電力グラフィックサブシステム40を選択的に無効化できるようにする働きをする。] 図4 [0102] このため、図8に図に示すように、コンピューティングデバイス10はスイッチ56を更に備える。スイッチ56はサブシステム40およびサブシステム30によって生成されたビデオ信号を第1の入力と第2の入力とで受信する。スイッチ56は、マルチプレクサなどのいずれかの適切なビデオスイッチでもよく、その2つの信号入力の従来のビデオ信号の一方を、そのビデオ出力コネクタに提示するように動作可能である。スイッチ56の入力に提示されるビデオ信号は、(LVDSまたはTMDSフォーマットなどの)ディジタル信号または(VGAフォーマットなどの)アナログ信号などの従来のビデオ信号であってもよい。スイッチ56がディジタル入力信号とアナログ入力信号の両方を受信するか、またはどちらか一方の出力でビデオを供給するように構成されている場合、スイッチ56はフォーマットコンバータを含み得る。また、スイッチ56は、ディジタルまたはアナログディスプレイデバイス32の一方または両方を接続できるようにするために1つ以上のビデオ出力を備えうる。] 図8 [0103] スイッチ56は制御入力(CNTRL)を更に含む。この制御入力は、スイッチ56のビデオ出力にいずれの信号入力が供給されるかを制御する。図に示した実施形態では、制御入力は、デバイス10の電力モードの変更が必要であるか、またはこれが望ましいことを検出または決定すると、汎用入出力(GPIO)インタフェース(図示せず)経由で、プロセッサ12によって切り替えられる。明らかとなるように、スイッチ56は、デバイス10が低電力消費モードで動作している場合には、グラフィックサブシステム30によって生成された従来のビデオ信号が選択されるように構成されている。逆に言えば、デバイス10が高電力消費モードで動作している場合、高性能の外部グラフィックサブシステム40によって生成されたビデオ信号が表示用に選択される。同様に、グラフィックサブシステム40またはグラフィックサブシステム30に供給される電力が低減されるか、または無効にされうる。この切り替えは、コンピューティングデバイス10の使用中に、デバイス10に再始動(すなわちコールドスタートまたはウォームスタート)を要求とせずに、動的に行なうことができる。] [0104] これを行うために、コンピューティングデバイス10は、上述した少なくとも1つの電力コントローラ60も備えうる。図に示した実施形態では、電力コントローラ60は、グラフィックサブシステム40を搭載している周辺拡張カード46の一部を形成する。しかし電力コントローラ60が、コンピューティングデバイス10のマザーボードの一部として、またはインタフェース16の一部として形成されてもよい。電力コントローラ60は、拡張カード46の一部を形成する場合、サブシステム40の動作をより柔軟に制御することができる。電力コントローラ60がコンピューティングデバイス10の一部を形成する場合、グラフィックサブシステム40への電力を無効にする能力しか有さないこともある。] [0105] システムメモリ12内部のソフトウェア200は、スイッチ56および電力コントローラ60を構成し制御するために使用される。このため、図9は、本発明の実施形態の例示において、2つの利用可能な電力消費モード間でデバイス10を切り替えるための例示的なソフトウェアブロックS900を例示するフローチャートである。] 図9 [0106] ここで、本発明の実施形態の例示では、デバイス10が最初に電源投入された時に、デバイス10の電力状態が評価される。電力制御アプリケーション201は、必要に応じて、以下に詳述するように、グラフィックサブシステム30および40ならびにスイッチ56を構成する。] [0107] 本発明の実施形態の例示的なソフトウェアブロックS900は、システムメモリ10内部の電力制御アプリケーション201の制御下でプロセッサ12によって実行されうる。ブロックS1100はデバイス10が状態変化を受けるたびに実行され、これに対して、サブシステム30,40を相応に構成する必要がある。図に示すように、ブロックS902において、電力制御アプリケーション201は、デバイス10が高電力消費モードまたは低電力消費モードのいずれを取るべきかを判定する。] [0108] アプリケーション201(図4)は、固有のグラフィック電力状態に対して、いずれのグラフィックサブシステム30,40が好適なデバイスであるかを示すテーブルを保持しうる。各ユーザ電力状態は、グラフィックサブシステム30,40と、そのサブシステムの対応する状態にマップされる。個々のグラフィックサブシステム30,40の電力状態とは、現在アクティブなグラフィックサブシステム30または40のクロック速度、メモリ速度、ピクセルクロック速度、レンダリング性能などの動作パラメータなどである。] 図4 [0109] 例示の実施形態では、デバイス10がAC電源36から動作している場合は、高電力消費モードが使用され、デバイス10がDC電源38経由で動作している場合、DC電源38が低い場合などは、低電力消費モードが使用されうる。高電力消費モードでは、グラフィックサブシステム40がアクティブである。低電力消費モードでは、グラフィックサブシステム30がアクティブである。] [0110] デバイス10が高電力消費モードを再開(またはこれに移行)すべき場合、ブロックS904〜S910が実行される。ブロックS904において、サブシステム40は、まだフル動作(高電力消費)モードに設定されていなければ、高電力消費モードに設定される。これは、適したドライバコールによって、プロセッサ12によって、電力コントローラ60に適切な信号を供給することにより実行することができる(AMDまたはATIグラフィックサブシステムでは、従来のATPX ACPIメソッドが使用され、他の製造業者のグラフィックサブシステムでは、同様のメソッドまたは関数が使用されうる)。次に、ブロックS906において、サブシステム40が有効にされる。これは、構成マネージャのWindows PnPコールを使用してサブシステム40を有効にすることによって行うことができる。このサブシステムが有効にされたら、オペレーティングシステムは新しいデバイス名を得るために、すべてのデバイスを列挙しうる。このために、WindowsのEnumDisplayDevices()API関数が使用されうる。その後、WindowsのChangeDisplaySettingsEX()APIコールを使用して、2台のデバイスを有する拡張デスクトップが作成されうる。ここで、アプリケーション201は、(例えば、WM_DISPLAYMODECHANGEメッセージを受け取ることによって)アダプタが変更されていることを検知しうる。アプリケーション210は再起動コマンドを発行しうる。ブロックS906において、CWDDEDI(ATI/AMDグラフィックサブシステム用のドライバ用の関数)を使用するか、あるいは他の製造業者のグラフィックサブシステムのドライバでは同様の関数を使用して、ディスプレイが電源切断され、制御メソッドコールを使用して一体型I2Cコントローラを無効にして、I2Cバッファを無効にする。S908ブロックにおいて、例えば、ATI/AMDグラフィックサブシステムの場合はATPX ACPIメソッドを使用するか、あるいは他の製造業者のグラフィックサブシステム用のドライバの場合は同様の関数を使用して、グラフィックサブシステム40からの出力を選択するように、スイッチ56が構成されうる。ブロックS910において、新たに有効にされたグラフィックサブシステム40が論理的に有効にされ、オペレーティングシステムのほかの部分から認識可能となる。これは、WindowsのChangeDisplaySettingsEX()APIコールを使用して行うことができる。同様に、グラフィックサブシステム30を、表示されているデスクトップから取り外すことによって、このサブシステムが論理的に無効にされうる。これは、WindowsのChangeDisplaySettingsEX()APIコールを使用して行うことができる。オペレーティングシステムによって問い合せが行われたときに、一体型ディスプレイを隠すために、別のプライベートAPI(エスケープ)コールがドライバ対してに行われてもよく、無効にされたグラフィックサブシステムを隠すことができる。] [0111] 説明したように、Vistaでは、1つのグラフィックKMDのみがアクティブとなる。通常は2つの異なるデバイスドライバによって制御される2つのグラフィックサブシステム30,40をサポートするために、KMDプロキシコンポーネント324が、2つのグラフィックサブシステム30,40のカーネルモードドライバとして動作する。同様に、UMDプロキシコンポーネント320,322は、1つのUMDとして動作する。] [0112] デバイス10が低電力消費モードに移行するか、このモードを再開した場合、ブロックS912〜S918が実行される。大まかに言って、グラフィックサブシステム40が無効にされ低電力消費モードに設定される一方、グラフィックサブシステム30が有効にされる。このために、ブロックS912,S914において、グラフィックサブシステム30が有効にされる。この場合も、このことは、ブロックS804において、グラフィックサブシステム30’に関連する、相互接続されたディスプレイを論理的に無効にし、ブロックS808において、グラフィックサブシステム40’と接続されたディスプレイを論理的に有効にすることによって実行することができる。ブロックS912およびS914は、上記のEnumDisplayDevices()コールおよびChangeDisplaySettingsEX()コールなどの適切なオペレーティングシステムAPIコールによってか、またはハードウェアとの直接通信によって実行することができる。] [0113] ディスプレイが論理的に無効にされた後、ブロックS918において、KMDコンポーネント360,362へのAPI呼出しが使用され、グラフィックサブシステムが低電力モードに物理的に設定されうる。このために、プロセッサ12は電力コントローラ60に適切な信号を供給し、グラフィックサブシステム40を低電力状態に設定する。最も単純な形態では、電力コントローラ60がグラフィックサブシステム40への電力を遮断するか、またはグラフィックサブシステム40を低電力スリープモードに設定する。一方、電力制御アプリケーション201は、グラフィックサブシステム40をACPI仕様によって規定されるデバイス電力状態の1つなどの低電力スリープモードに設定するように、電力コントローラ60に指示しうる。いずれにせよ、この低電力消費モードでは、電圧が抑えられるか、グラフィックサブシステム40の全部または一部が電源切断されるか、グラフィックサブシステム40が使用する選択されたクロックが減速されるか、この組み合わせが行われる。] [0114] グラフィックサブシステム30,40の特定の1つが、論理的および物理的に有効にされると、UMDプロキシコンポーネント320,322;およびKMDプロキシコンポーネント324に、現在アクティブなサブシステムの指標が提供され、グラフィックサブシステムに対するAPI/DDIコールが、前述のように現在有効なグラフィックサブシステム30,40に対応して、適宜UMD/KMDコンポーネント340,350,360または342,352,362に転送される。] [0115] スイッチ56が適切に設定されることを保証するために、デバイス10用のBIOSは、ユーザが、起動時にアクティブにすべきデバイスを選択できるようにしる。] [0116] スイッチ56ならびにグラフィックサブシステム40およびグラフィックサブシステム30を上で説明したように構成することにより、電力消費を低減し、デバイス10に2つのグラフィックプロセッサの一方のみに必要な電力を消費させ、これによって全体的なエネルギー消費を低減し、バッテリ寿命を温存でき、有利である。例えば、ポータブルコンピューティングデバイスは、通常、出張者によりバッテリ動作モード(DC電力)で使用される。このようなユーザの出張中の典型的な使用パターンは、文書処理、プレゼンテーションおよび電子メールアプリケーションなどであると考えられる。これらのアプリケーションは、外部グラフィックサブシステム40によって提供される高負荷のグラフィックの高速化を必要としない。第2の(例えば外部)グラフィックサブシステム40の使用から、平均電力消費の低い第1の(例えば一体型)グラフィックサブシステム30の使用へ移行することにより、システム全体の性能を犠牲にすることなく、高性能のグラフィック処理と低電力消費との間でバランスを取ることができるようになる。] [0117] 図9は、本発明の別の実施形態の代表的なコンピューティングデバイス10’の一部の例の代表的な簡略ブロック図である。コンピューティングデバイス10’はコンピューティングデバイス10とほぼ同様である。したがって、デバイス10の部品と機能的に同等のデバイス10’の部品はプライム記号(’)を付しており、詳細には説明しない。しかし簡単に説明すると、デバイス10’は2つのグラフィックサブシステム30’,40’を備える。この場合も、グラフィックサブシステム30’は、グラフィックエンジン32’、メモリコントローラ72’、ディスプレイインタフェース74’およびバスインタフェース78’を備える。第2のグラフィックサブシステム40’は、高速バス20’経由でグラフィックサブシステム30’と通信している。グラフィックサブシステム40’は、自身のグラフィックエンジン42’、メモリコントローラ52’、ディスプレイインタフェース54’を備える。グラフィックサブシステム40’は更にグラフィックメモリ50’と通信している。特に言えば、デバイス10’は、グラフィックサブシステム30’およびグラフィックサブシステム40’のいずれがディスプレイ26’に相互接続されるかを制御するために使用されるスイッチを含まない。この代わりに、明らかとなるように、サブシステム40’は、バス20’を介してメモリ14’にグラフィックをレンダリングするように適合されている。] 図9 [0118] デバイス10’の動作を制御するソフトウェアの構成はデバイス10と同様である。しかし、デバイス10’が高低電力消費と低電力消費状態間で移行する際にデバイス10’の動作を制御するソフトウェアの一部は、デバイス10のものとは異なる。] [0119] 詳細には、図11は、デバイス10’のシステムメモリ内部のソフトウェアの制御下でプロセッサ12’によって実行されうる本発明の実施形態の例示的なソフトウェアブロックS1100’を示す。この場合も、ブロックS1100はデバイス10’が状態変化を受けるたびに実行され、これに対して、サブシステム30’,40’を相応に構成する必要がある。図に示すように、ブロックS1102において、ソフトウェアは、デバイス10’が高電力消費モードまたは低電力消費モードのいずれを取るべきかを判定する。] 図11 [0120] デバイス10’が高電力消費モードを再開(またはこれに移行)すべき場合、ブロックS1104〜S1110が実行される。ブロックS1104において、グラフィックサブシステム40’は、まだフル動作(高電力消費)モードに設定されていなければ、高電力消費モードに設定される。このことは、グラフィックサブシステム40’を制御するドライバを介して、電力コントローラ60’に適切な信号を供給することによって実行することができる。次に、ブロックS1106,S1108において、グラフィックサブシステム40’が有効にされる。この場合も、このことは、ブロックS1804において、グラフィックサブシステム30’に関連する、相互接続されたディスプレイを論理的に無効にし、ブロックS1108において、グラフィックサブシステム40’と接続されたディスプレイを論理的に有効にすることによって実行することができる。この場合も、ブロックS1106,S1108は、上記のEnumDisplayDevices()コールおよびChangeDisplaySettingsEX()コールなどの適切なオペレーティングシステムAPIコールによってか、またはハードウェアとの直接通信によって実行することができる。] [0121] 特に言えば、グラフィックサブシステム40’に接続されている物理的ディスプレイは存在しない。(デバイス10(図4)の)スイッチ56がない場合、グラフィックサブシステム40’の動作を制御しているドライバソフトウェアは、ステップS1110において、関連するメモリ50’内部の代わりに、グラフィックサブシステム30’のバッファ14’に画像をレンダリングするように構成される。(例えば、PCIeバスとして実装された)高速バス22が存在している場合、このようなレンダリングが、一部には、このバスによって実現される転送速度のおかげで、バス22’を介して可能となり、利便性が高い。] 図4 [0122] 同様に、グラフィックサブシステム30’用のドライバは更に、グラフィックサブシステム40’によってメモリ14’内のフレームバッファにレンダリングされた画像を、相互接続されたディスプレイ26’で提示するために、グラフィックサブシステム30’のディスプレイインタフェース74’に、メモリ14’のフレームバッファをサンプリングさせるように構成されている。同時に、グラフィックサブシステム30’のドライバは、グラフィックサブシステム30’のグラフィックエンジン32’に対し、実質的に活動停止状態またはアイドル状態に留まるように指示することができる。この動作モードは、図12Aに模式的に示されており、グラフィックサブシステム40’およびグラフィックサブシステム30’のアクティブなブロックのみが網掛けされている。] 図12A [0123] 明らかとなるように、図12Aの実施形態では、メモリ50’とディスプレイインタフェース54’は使用されていない。このため、これらの機能ブロックはサブシステム40’から削除することができ、コスト低減が可能となる。このようなグラフィックサブシステムを作成することは、サブシステム30’によって提供される機能をサブシステム40’が補完するように作成されうるため、有益であろう。例えば、サブシステムは、3Dグラフィックまたはビデオのデコーディング機能を提供するグラフィックエンジン42’を提供してもよい。グラフィックエンジン32’はこれらの機能を搭載していなくてもよい。同時に、グラフィックエンジン32’によって提供される2Dグラフィック機能を、サブシステム40’に搭載する必要はない。消費者は、追加の機能が必要な場合にのみグラフィックサブシステム30’を追加してもよい。] 図12A [0124] デバイス10’が低電力消費モードに移行するか、このモードを再開した場合、ブロックS1112〜S1118が実行される。概説すると、グラフィックサブシステム40’は、部分的または完全に無効にされて低電力消費モードに設定され、この場合も、レンダリングがグラフィックサブシステム30’によって実行される。これを行うため、ブロックS912’において、グラフィックサブシステム30’に関連する、相互接続されたディスプレイが有効にされ、ブロックS1114において、グラフィックサブシステム40’と物理的に接続されたあらゆるディスプレイが論理的に無効にされる。次に、グラフィックサブシステム30’の動作を制御するドライバソフトウェアが、グラフィックサブシステム30’にメモリ14’に画像をレンダリングさせるように再度構成される。ディスプレイインタフェース74’は、ポート78’と相互接続されたディスプレイ26’で画像を提示するために、メモリ14’をサンプリングし続ける。同様に、ブロックS818において、プロセッサ12’は最初に電力コントローラ60’に適切な信号を供給し、グラフィックサブシステム40’を低電力状態に設定する。最も単純な形態では、電力コントローラ(図示なし)がグラフィックサブシステム40’への電力を遮断するか、またはグラフィックサブシステム40’を低電力スリープモードに設定する。この場合も、この低電力消費モードでは、電圧が抑えられるか、グラフィックサブシステム40’の全部または一部が電源切断されるか、グラフィックサブシステム40’が使用する選択されたクロックが減速されるか、この組み合わせが行われる。詳細には、グラフィックサブシステムのグラフィックエンジン42’が、アイドル状態に留まるか、または実質的にアイドル状態に留まる(例えば低速化されるか、無効にされるか、または電源切断される)。この動作モードは、図12Bに模式的に示されており、アダプタ40’とグラフィックサブシステム30’のアクティブな機能ブロックのみが網掛けされている。非作動状態/アイドル状態の機能ブロックは、完全に無効化されるか、または低電圧または低クロック速度で動作される。] 図12B [0125] 任意選択で、グラフィックサブシステム30’の一部が、グラフィックエンジン32’の不使用時に無効にされてもよい。このことは、グラフィックサブシステム40’が画像のレンダリングを担っている任意の時に、GPIOまたは類似の回路によって無効にできる1つ以上のボルテージアイランド(voltage island)に、グラフィックエンジン32’および他の部品を配置することによって容易に行うことができる。] [0126] 他の変更例もまた明白であろう。例えば、図12Aに示す高電力モードにおいて、グラフィックサブシステム30とグラフィックサブシステム40’の両方が、メモリ14またはメモリ50’にレンダリングしてもよい。このようにして、2つのグラフィックサブシステム30’,40’が、それぞれメモリ14’の交番フレームにレンダリングするか、またはメモリ14’の各フレームの一部にレンダリングして、協調して動作することができる。] 図12A [0127] 更に別の実施形態では、上で説明したように、追加ディスプレイをグラフィックサブシステム30’,40’に接続して、高電力消費モードでの複数台のディスプレイの同時使用を可能にすることができる。このようにして、ディスプレイインタフェース54を、第2のディスプレイを駆動するために使用することができる。デバイス10’を、低電力消費モードへの移行時に、図9Bに示すように動作するように構成してもよい。] 図9B [0128] 同様に、デバイス10’(または10)は、バス20’(または20)に接続された複数の追加のグラフィックサブシステムを有してもよく、高電力消費モードにおいては、そのすべてがアクティブとなり、グラフィックサブシステム30’のディスプレイインタフェース74’を介してグラフィックをレンダリングしてもよい。低電力消費モードへの移行時に、このグラフィックサブシステムが無効化され、グラフィックサブシステム30’のグラフィックエンジン32’にレンダリングが任せられうる。] [0129] 図13に示す更に別の実施形態では、コンピューティングデバイス10はダイレクトメモリアクセス(DMA)コントローラ90を備えてもよい。DMAコントローラ90はデータをメモリ50’からメモリ14’に転送することができる。このように、デバイス10’の高電力消費モードにおいて、グラフィックサブシステム40’は画像をメモリ50’にレンダリングしうる。レンダリングされたこれらの画像はその後、DMAコントローラ90によってメモリ14’内のフレームバッファに転送されうる。DMAコントローラ90’は、(例えばグラフィックエンジン32’または42’のDMAエンジンとして)グラフィックサブシステム30’または40’の一部を構成するか、またはコンピューティングデバイス10’内に別の方法で配置されうる。データは、メモリ50’からメモリ14’に、バス20’を介して転送されるか、または別の方法で直接転送されうる。ディスプレイインタフェース74’は、上述のように動作を続け、レンダリングされた画像をディスプレイ26’で提示するためにメモリ14’のフレームバッファをサンプリングする。この場合も、高電力消費モードにある図10のデバイス13’のアクティブなブロックが、図13で網掛けして図示されている。] 図10 図13 [0130] 当然、上記の実施形態は、例示のみを目的としており、限定を意図するものではない。本発明を実施する記載した実施形態は、形状、部品の配置、操作の詳細および順序がさまざまに変更される。むしろ、本発明は、請求の範囲によって規定される範囲に、このような変更のすべてを含むことを意図する。]
权利要求:
請求項1 電子デバイスであって、グラフィックをレンダリングするように動作可能な第1のグラフィックサブシステムと、グラフィックをレンダリングするように動作可能な第2のグラフィックサブシステムと、前記第1のグラフィックサブシステムおよび前記第2のグラフィックサブシステムの少なくとも一方と通信している少なくとも1台のディスプレイと、アプリケーションソフトウェアおよびドライバソフトウェアを実行するプロセッサとを備え、前記ドライバソフトウェアは、前記第1のグラフィックサブシステムの動作を制御するための第1のドライバコンポーネントと、前記第2のグラフィックサブシステムの動作を制御するための第2のドライバコンポーネントと、前記第1のグラフィックシステおよび前記第2のグラフィックシステムのいずれが使用中であるかに応じて、前記アプリケーションから、前記第1のドライバコンポーネントおよび前記第2のドライバコンポーネントのいずれかにコールを転送するプロキシドライバコンポーネントとを有する、電子デバイス。 請求項2 前記プロセッサは、前記プロセッサに、前記第2のグラフィックサブシステムが前記ディスプレイにグラフィックをレンダリングする第1のモードから、前記第1のグラフィックサブシステムが前記ディスプレイにグラフィックをレンダリングするとともに、前記第2のグラフィックサブシステムが低電力消費モードに設定される第2のモードに前記電子デバイスを移行させる命令を実行させる、請求項1に記載の電子デバイス。 請求項3 前記第1のドライバコンポーネントおよび前記第2のドライバコンポーネントは前記プロセッサのユーザモードで実行しているドライバコンポーネントを含む、請求項1に記載の電子デバイス。 請求項4 前記第1のドライバコンポーネントおよび前記第2のドライバコンポーネントは前記プロセッサのカーネルモードで実行しているドライバコンポーネントを含む、請求項1に記載の電子デバイス。 請求項5 前記第1のグラフィックシステムおよび第2のグラフィックシステムのうちいずれが使用中であるかは前記電子デバイスの電力状態に依存する、請求項1に記載の電子デバイス。 請求項6 前記プロキシドライバコンポーネントは、前記第1のグラフィックシステおよび前記第2のグラフィックシステムのいずれが使用中であるかに応じて、前記デバイスのオペレーティングシステムから、前記第1のドライバコンポーネントまたは前記第2のドライバコンポーネントのいずれかにコールを転送する、請求項1に記載の電子デバイス。 請求項7 前記プロキシドライバコンポーネントは、前記転送を実行するために、前記第1のドライバコンポーネントおよび前記第2のドライバコンポーネント内の同等のドライバ関数を識別する一致構造体を作成する、請求項1に記載の電子デバイス。 請求項8 電子デバイスであって、グラフィックをレンダリングするように動作可能な第1のグラフィックサブシステムと、グラフィックをレンダリングするように動作可能な第2のグラフィックサブシステムと、前記第1のグラフィックサブシステムおよび前記第2のグラフィックサブシステムの両方と通信しているディスプレイと、アプリケーションソフトウェアおよびドライバソフトウェアを実行するプロセッサとを備え、前記ドライバソフトウェアは、前記第1のグラフィックサブシステムの動作を制御するための第1のユーザモードドライバコンポーネントと、前記第2のグラフィックサブシステムの動作を制御するための第2のユーザモードドライバコンポーネントと、前記第1のグラフィックシステムおよび前記第2のグラフィックシステムのいずれが使用中であるかに応じて、前記アプリケーションから、前記第1のユーザモードドライバコンポーネントおよび前記第2のユーザモードドライバコンポーネントのいずれかにコールを転送するユーザモードプロキシドライバコンポーネントと、前記第1のグラフィックサブシステムの動作を制御するための第1のカーネルモードドライバコンポーネントと、前記第2のグラフィックサブシステムの動作を制御するための第2のカーネルモードドライバコンポーネントと、前記第1のグラフィックシステムおよび第2のグラフィックシステムのいずれかが使用されているかに応じて、前記ユーザモードドライバコンポーネントのいずれかから、前記第1のカーネルドライバコンポーネントおよび前記第2のカーネルドライバコンポーネントのいずれかにコールを転送するためのカーネルモードプロキシドライバコンポーネントとを含む、電子デバイス。 請求項9 グラフィックをレンダリングするように動作可能な第1のグラフィックサブシステムと、グラフィックをレンダリングするように動作可能な第2のグラフィックサブシステムと、前記第1のグラフィックサブシステムおよび前記第2のグラフィックサブシステムの両方と通信しているディスプレイと、プロセッサとを備えるコンピュータ装置で実行するためのドライバソフトウェアを記憶している計算機可読媒体であって、前記ドライバソフトウェアは、前記第1のグラフィックシステムおよび第2のグラフィックシステムのいずれかが使用されているかに応じて、前記アプリケーションから、前記第1のグラフィックサブシステムの動作を制御する第1のドライバコンポーネントまたは前記第2のグラフィックサブシステムの動作を制御する第2のドライバコンポーネントのいずれかにコールを転送するためのプロキシドライバコンポーネントを含む、計算機可読媒体。 請求項10 前記プロキシドライバコンポーネントは、前記転送を実行するために、前記第1のドライバコンポーネントおよび前記第2のドライバコンポーネント内の同等のドライバ関数を識別する一致構造体を作成する、請求項9に記載の計算機可読媒体。 請求項11 前記プロキシドライバコンポーネントは、前記第1のグラフィックシステおよび前記第2のグラフィックシステムのいずれが使用中であるかに応じて、前記デバイスのオペレーティングシステムから、前記第1のドライバコンポーネントまたは前記第2のドライバコンポーネントのいずれかにコールを転送する、請求項10に記載の計算機可読媒体。 請求項12 前記第1のドライバコンポーネントおよび前記第2のドライバコンポーネントは前記プロセッサのユーザモードで実行しているドライバコンポーネントを含む、請求項9に記載の計算機可読媒体。 請求項13 前記第1のドライバコンポーネントおよび前記第2のドライバコンポーネントは前記プロセッサのカーネルモードで実行しているドライバコンポーネントを含む、請求項9に記載の計算機可読媒体。 請求項14 グラフィックをレンダリングするように動作可能な第1のグラフィックサブシステムと第2のグラフィックサブシステムとを備える電子デバイスを動作させる方法であって、前記電子デバイスで実行しているソフトウェアアプリケーションまたはオペレーティングシステムからドライバコールを受け取るステップと、前記第1のグラフィックシステムおよび前記第2のグラフィックシステムのいずれが使用中であるかに応じて、ソフトウェアアプリケーションから、前記第1のグラフィックサブシステムの動作を制御する第1のソフトウェアドライバコンポーネントまたは前記第2のグラフィックサブシステムの動作を制御する第2のソフトウェアドライバコンポーネントのいずれかに前記ドライバコールを転送するステップとを含む、方法。 請求項15 前記転送を実行するために前記第1のドライバコンポーネントおよび前記第2のドライバコンポーネント内の同等のドライバ関数を識別する一致構造体を作成するステップを更に含む、請求項14に記載の方法。
类似技术:
公开号 | 公开日 | 专利标题 US20200183646A1|2020-06-11|Method and system for dynamically generating different user environments with secondary devices with displays of various form factors JP6507169B2|2019-04-24|複数のユーザインターフェース動作ドメインを有する車両 US10168758B2|2019-01-01|Techniques to enable communication between a processor and voltage regulator US9189261B2|2015-11-17|Saving, transferring and recreating GPU context information across heterogeneous GPUs during hot migration of a virtual machine US8860707B2|2014-10-14|Switching display update properties upon detecting a power management event US9354900B2|2016-05-31|Method and apparatus for presenting a window in a system having two operating system environments US8350864B2|2013-01-08|Serializing command streams for graphics processors US8131905B2|2012-03-06|Dockable handheld computing device with graphical user interface and methods for use therewith US8934755B2|2015-01-13|System and method for managing multiple independent graphic sources in an information handling system US7310722B2|2007-12-18|Across-thread out of order instruction dispatch in a multithreaded graphics processor EP0817096B1|2010-07-14|Integrated circuit US8893154B2|2014-11-18|Mobile device with two operating systems and method for sharing hardware device between two operating systems thereof US6816925B2|2004-11-09|Combination personal data assistant and personal computing device with master slave input output US9152582B2|2015-10-06|Auto-configuration of a docked system in a multi-OS environment US6968468B2|2005-11-22|Digital computer utilizing buffer to store and output data to play real time applications enabling processor to enter deep sleep state while buffer outputs data AU2008214236B2|2012-02-09|Supporting multiple operating systems in media devices US8365000B2|2013-01-29|Computer system and control method thereof US7401243B2|2008-07-15|Demand-based dynamic clock control for transaction processors US8527679B2|2013-09-03|Apparatus and method for adaptation of input/output interface in virtualization environment US7117379B2|2006-10-03|Method and apparatus for a computing system having an active sleep mode US8065536B2|2011-11-22|Dual mode power-saving computing system US8468332B2|2013-06-18|Dynamic link loading in extensible firmware interface compliant systems US7889202B2|2011-02-15|Transparent multi-buffering in multi-GPU graphics subsystem JP5331886B2|2013-10-30|ハイブリッドシャットダウンプロセスと高速な起動プロセスとを実現する方法とシステム US8769256B2|2014-07-01|Fast switching between multiple operating systems using standby state
同族专利:
公开号 | 公开日 WO2009076671A2|2009-06-18| CN101978352A|2011-02-16| KR101565562B1|2015-11-03| CN101978352B|2017-11-03| EP2243080B1|2016-09-21| KR20100110824A|2010-10-13| US8487943B2|2013-07-16| US20090153540A1|2009-06-18| EP2243080A2|2010-10-27| JP5427187B2|2014-02-26| WO2009076671A3|2009-07-30|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题 JPH0588846A|1991-09-30|1993-04-09|Toshiba Corp|フラツトパネル表示制御システム| JPH11242604A|1997-09-22|1999-09-07|Hitachi Ltd|代理サーバおよび代理サーバプログラムが記録された記録媒体| JP2006012170A|2004-06-24|2006-01-12|Internatl Business Mach Corp <Ibm>|ユーザ・モード・プロセスが特権実行モードで動作することを可能にする方法|JP2013527948A|2010-03-25|2013-07-04|インターナショナル・ビジネス・マシーンズ・コーポレーションInternationalBusinessMachinesCorporation|Method, system and computer program for dispatching tasks in a computer system| JP2016532208A|2013-09-27|2016-10-13|インテル コーポレイション|統合されたPCIeコントローラのための改善された電力制御技術|JPH1165719A|1997-08-21|1999-03-09|Toshiba Corp|コンピュータおよび画像表示方法| AU2570399A|1998-01-30|1999-08-16|3Com Corporation|Software architecture for providing low level hardware device drivers from the user mode under multi-tasking operating systems| US6624816B1|1999-09-10|2003-09-23|Intel Corporation|Method and apparatus for scalable image processing| US6760031B1|1999-12-31|2004-07-06|Intel Corporation|Upgrading an integrated graphics subsystem| JP3862976B2|2001-07-31|2006-12-27|株式会社東芝|表示機構| US7079149B2|2001-10-09|2006-07-18|Texas Instruments Incorporated|System, method, and device for accelerated graphics port linking| US7600222B2|2002-01-04|2009-10-06|Microsoft Corporation|Systems and methods for managing drivers in a computing system| US6864891B2|2002-01-31|2005-03-08|Hewlett-Packard Development Company L.P.|Switching between internal and external display adapters in a portable computer system| US7102645B2|2003-12-15|2006-09-05|Seiko Epson Corporation|Graphics display controller providing enhanced read/write efficiency for interfacing with a RAM-integrated graphics display device| US8176503B2|2004-01-27|2012-05-08|Hewlett-Packard Development Company, L.P.|Device driver selection| US6985152B2|2004-04-23|2006-01-10|Nvidia Corporation|Point-to-point bus bridging without a bridge controller| JP2005316176A|2004-04-28|2005-11-10|Toshiba Corp|電子機器及び表示制御方法| US8446417B2|2004-06-25|2013-05-21|Nvidia Corporation|Discrete graphics system unit for housing a GPU| TWM261751U|2004-07-09|2005-04-11|Uniwill Comp Corp|Switching display processing architecture for information device| CN100351788C|2005-05-18|2007-11-28|大唐移动通信设备有限公司|嵌入式设备的驱动方法| TWI366151B|2005-10-14|2012-06-11|Via Tech Inc|Multiple graphics processor system and methods| US7698597B2|2006-02-28|2010-04-13|International Business Machines Corporation|Method of isolating erroneous software program components| JP4794343B2|2006-03-30|2011-10-19|株式会社バンダイナムコゲームス|画像生成システム、プログラム及び情報記憶媒体| US8555099B2|2006-05-30|2013-10-08|Ati Technologies Ulc|Device having multiple graphics subsystems and reduced power consumption mode, software and methods| US7730336B2|2006-05-30|2010-06-01|Ati Technologies Ulc|Device having multiple graphics subsystems and reduced power consumption mode, software and methods| US7698579B2|2006-08-03|2010-04-13|Apple Inc.|Multiplexed graphics architecture for graphics power management|US8427496B1|2005-05-13|2013-04-23|Nvidia Corporation|Method and system for implementing compression across a graphics bus interconnect| CN101464785B|2007-12-17|2010-12-08|联想有限公司|基于wddm的屏幕获取方法及带多显示器的计算机系统| US8300056B2|2008-10-13|2012-10-30|Apple Inc.|Seamless display migration| TWI397819B|2008-12-31|2013-06-01|Asustek Comp Inc|一種驅動硬體裝置及處理資料之系統及其方法| US9075559B2|2009-02-27|2015-07-07|Nvidia Corporation|Multiple graphics processing unit system and method| US8610731B2|2009-04-30|2013-12-17|Microsoft Corporation|Dynamic graphics pipeline and in-place rasterization| US9135675B2|2009-06-15|2015-09-15|Nvidia Corporation|Multiple graphics processing unit display synchronization system and method| US8484616B1|2009-06-23|2013-07-09|Emc Corporation|Universal module model| US9336028B2|2009-06-25|2016-05-10|Apple Inc.|Virtual graphics device driver| US8838797B2|2009-07-10|2014-09-16|Empire Technology Development Llc|Dynamic computation allocation| US8558839B1|2009-07-24|2013-10-15|Nvidia Corporation|Displaying critical system screens in a multiple graphics adapter environment| US8305380B2|2009-09-09|2012-11-06|Advanced Micro Devices, Inc.|Managing resources to facilitate altering the number of active processors| US8780122B2|2009-09-16|2014-07-15|Nvidia Corporation|Techniques for transferring graphics data from system memory to a discrete GPU| US20110063304A1|2009-09-16|2011-03-17|Nvidia Corporation|Co-processing synchronizing techniques on heterogeneous graphics processing units| US20110169844A1|2009-09-16|2011-07-14|Nvidia Corporation|Content Protection Techniques on Heterogeneous Graphics Processing Units| US9524138B2|2009-12-29|2016-12-20|Nvidia Corporation|Load balancing in a system with multi-graphics processors and multi-display systems| US9830889B2|2009-12-31|2017-11-28|Nvidia Corporation|Methods and system for artifically and dynamically limiting the display resolution of an application| US8648868B2|2010-01-06|2014-02-11|Apple Inc.|Color correction to facilitate switching between graphics-processing units| US8368702B2|2010-01-06|2013-02-05|Apple Inc.|Policy-based switching between graphics-processing units| US8797334B2|2010-01-06|2014-08-05|Apple Inc.|Facilitating efficient switching between graphics-processing units| JP2011141707A|2010-01-07|2011-07-21|Sony Corp|情報処理装置、情報処理方法及びプログラム| US20110216078A1|2010-03-04|2011-09-08|Paul Blinzer|Method, System, and Apparatus for Processing Video and/or Graphics Data Using Multiple Processors Without Losing State Information| US20120092351A1|2010-10-19|2012-04-19|Apple Inc.|Facilitating atomic switching of graphics-processing units| US8806511B2|2010-11-18|2014-08-12|International Business Machines Corporation|Executing a kernel device driver as a user space process| US8924752B1|2011-04-20|2014-12-30|Apple Inc.|Power management for a graphics processing unit or other circuit| US10817043B2|2011-07-26|2020-10-27|Nvidia Corporation|System and method for entering and exiting sleep mode in a graphics subsystem| US8692833B2|2011-08-09|2014-04-08|Apple Inc.|Low-power GPU states for reducing power consumption| US9047835B2|2011-08-17|2015-06-02|Broadcom Corporation|Thermal and power aware graphics processing| CN103988190A|2011-12-16|2014-08-13|英特尔公司|用于通过外部显示-数据i/o端口来扩展图形处理的方法、设备及系统| US8941671B2|2012-01-13|2015-01-27|Microsoft Corporation|Para-virtualized domain, hull, and geometry shaders| US8692832B2|2012-01-23|2014-04-08|Microsoft Corporation|Para-virtualized asymmetric GPU processors| KR101920239B1|2012-03-06|2018-11-20|삼성전자주식회사|파일 시스템 기능을 제공하는 단말기의 장치 및 방법| US9390461B1|2012-05-08|2016-07-12|Apple Inc.|Graphics hardware mode controls| KR20140013652A|2012-07-26|2014-02-05|삼성전자주식회사|시스템 온 칩 및 이를 포함하는 전자 기기| US9607407B2|2012-12-31|2017-03-28|Nvidia Corporation|Variable-width differential memory compression| US9591309B2|2012-12-31|2017-03-07|Nvidia Corporation|Progressive lossy memory compression| US9818379B2|2013-08-08|2017-11-14|Nvidia Corporation|Pixel data transmission over multiple pixel interfaces| US9989980B1|2015-08-17|2018-06-05|Amazon Technologies, Inc.|System level thermal management| US9967577B2|2015-08-31|2018-05-08|Microsoft Technology Licensing, Llc|Acceleration interface for video decoding| CN108549477A|2018-03-28|2018-09-18|联想有限公司|一种功率调整方法及电子设备|
法律状态:
2011-12-15| A621| Written request for application examination|Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20111214 | 2013-05-14| A977| Report on retrieval|Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20130514 | 2013-05-23| A131| Notification of reasons for refusal|Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20130522 | 2013-08-21| A601| Written request for extension of time|Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20130820 | 2013-08-28| A602| Written permission of extension of time|Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20130827 | 2013-09-25| A521| Written amendment|Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20130924 | 2013-11-08| TRDD| Decision of grant or rejection written| 2013-11-14| A01| Written decision to grant a patent or to grant a registration (utility model)|Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20131113 | 2013-12-05| A61| First payment of annual fees (during grant procedure)|Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20131129 | 2013-12-06| R150| Certificate of patent or registration of utility model|Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 5427187 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 | 2016-12-06| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2017-12-05| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2018-12-04| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2019-12-03| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2020-11-30| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 | 2021-11-30| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
优先权:
[返回顶部]
申请号 | 申请日 | 专利标题 相关专利
Sulfonates, polymers, resist compositions and patterning process
Washing machine
Washing machine
Device for fixture finishing and tension adjusting of membrane
Structure for Equipping Band in a Plane Cathode Ray Tube
Process for preparation of 7 alpha-carboxyl 9, 11-epoxy steroids and intermediates useful therein an
国家/地区
|